package com.monkeyboy.rabbitmq.workqueue;

import com.monkeyboy.rabbitmq.RabbitmqConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

/**
 * 作用： 生产者生产消息
 * 
 * @author Gavin
 * @time:2018年10月24日
 */
public class Producer {
	private final static String QUEUE_NAME = "test_queue_work";

	public static void main(String[] args) throws Exception {
		// 获取到连接一级mq通道(相当于mysql获取连接)
		Connection connection = RabbitmqConnectionUtil.getConnection();
		// 从连接中创建通道(相当于mysql获取连接后还得获取到statement才能操作数据库一样的道理)
		Channel channel = connection.createChannel(1);

		/*
		 * 
		 * 接下来就是通过通道来进行一系列的操作（相当于用mysql获取到statement对象后就可以进行增上改查）
		 */
		// 声明（创建）队列【相当于mysql数据库中的表，用来存数据】(用来接受消息，生产者---》发送消息到队列《------消费者消费消息)
		/*
		 * 聲明（創建）隊列 
		 * 參數1：隊列名稱 
		 * 參數2：為true時server重啟隊列不會消失
		 * 參數3：隊列是否是獨佔的，如果為true只能被一個connection使用，其他連接創建時會拋出異常
		 * 參數4：隊列不再使用時是否自動刪除（沒有連接，並且沒有未處理的消息)
		 *  參數5：創建隊列時的其他參數
		 */
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);
		// 循环发送50条消息【相当于生产者生产消息】
		for (int i = 0; i < 50; i++) {
			String message = "" + i;
			// 发送到队列中
			channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
			System.out.println("send----->" + message);
			Thread.sleep(i * 10);
		}
		// 关闭通道和连接
		channel.close();
		connection.close();
	}
}
